home *** CD-ROM | disk | FTP | other *** search
/ Cre@te Online 2000 December / Cre@teOnline CD05.iso / MacSoft / XML ConsoleMax.sea / XML ConsoleMax / Required / swingall.jar / javax / swing / DefaultFocusManager.class (.txt) < prev    next >
Encoding:
Java Class File  |  1999-07-15  |  4.8 KB  |  273 lines

  1. package javax.swing;
  2.  
  3. import java.awt.AWTEvent;
  4. import java.awt.Component;
  5. import java.awt.Container;
  6. import java.awt.Dialog;
  7. import java.awt.Rectangle;
  8. import java.awt.Window;
  9. import java.awt.event.InputEvent;
  10. import java.awt.event.KeyEvent;
  11. import java.util.Stack;
  12.  
  13. public class DefaultFocusManager extends FocusManager {
  14.    Stack history = new Stack();
  15.  
  16.    Component[] childrenTabOrder(Container var1) {
  17.       Component[] var2 = var1.getComponents();
  18.       int var4 = 0;
  19.  
  20.       for(int var6 = var2.length; var4 < var6; ++var4) {
  21.          for(int var5 = var4; var5 < var6; ++var5) {
  22.             if (var4 != var5 && this.compareTabOrder(var2[var5], var2[var4])) {
  23.                Component var3 = var2[var4];
  24.                var2[var4] = var2[var5];
  25.                var2[var5] = var3;
  26.             }
  27.          }
  28.       }
  29.  
  30.       return var2;
  31.    }
  32.  
  33.    void clearHistory() {
  34.       this.history.removeAllElements();
  35.    }
  36.  
  37.    public boolean compareTabOrder(Component var1, Component var2) {
  38.       int var4;
  39.       int var6;
  40.       if (var1 instanceof JComponent) {
  41.          var4 = ((JComponent)var1).getY();
  42.          var6 = ((JComponent)var1).getX();
  43.       } else {
  44.          Rectangle var3 = var1.getBounds();
  45.          var4 = var3.y;
  46.          var6 = var3.x;
  47.       }
  48.  
  49.       int var5;
  50.       int var7;
  51.       if (var2 instanceof JComponent) {
  52.          var5 = ((JComponent)var2).getY();
  53.          var7 = ((JComponent)var2).getX();
  54.       } else {
  55.          Rectangle var8 = var2.getBounds();
  56.          var5 = var8.y;
  57.          var7 = var8.x;
  58.       }
  59.  
  60.       if (Math.abs(var4 - var5) < 10) {
  61.          return var6 < var7;
  62.       } else {
  63.          return var4 < var5;
  64.       }
  65.    }
  66.  
  67.    public void focusNextComponent(Component var1) {
  68.       if (var1 instanceof JComponent) {
  69.          JComponent var2 = (JComponent)var1;
  70.          Container var4 = this.getFocusRoot(var2);
  71.          if (!this.history.empty() && this.history.peek() != var1) {
  72.             this.history.removeAllElements();
  73.          }
  74.  
  75.          if (var4 != null) {
  76.             Component var3 = this.getFocusableComponentAfter(var2, var4, true);
  77.             if (var3 != null) {
  78.                if (this.history.empty() || this.history.peek() == var1) {
  79.                   this.history.push(var3);
  80.                }
  81.  
  82.                if (var3 instanceof JComponent) {
  83.                   ((JComponent)var3).grabFocus();
  84.                } else {
  85.                   var3.requestFocus();
  86.                }
  87.             }
  88.          }
  89.       }
  90.  
  91.    }
  92.  
  93.    public void focusPreviousComponent(Component var1) {
  94.       if (var1 instanceof JComponent) {
  95.          JComponent var2 = (JComponent)var1;
  96.          Container var4 = this.getFocusRoot(var2);
  97.          if (!this.history.empty() && this.history.peek() == var1) {
  98.             this.history.pop();
  99.             if (!this.history.empty()) {
  100.                Component var5 = (Component)this.history.peek();
  101.                if (var5 instanceof JComponent) {
  102.                   ((JComponent)var5).grabFocus();
  103.                } else {
  104.                   var5.requestFocus();
  105.                }
  106.  
  107.                return;
  108.             }
  109.          }
  110.  
  111.          this.history.removeAllElements();
  112.          if (var4 != null) {
  113.             Component var3 = this.getFocusableComponentAfter(var2, var4, false);
  114.             if (var3 != null) {
  115.                if (var3 instanceof JComponent) {
  116.                   ((JComponent)var3).grabFocus();
  117.                } else {
  118.                   var3.requestFocus();
  119.                }
  120.             }
  121.          }
  122.       }
  123.  
  124.    }
  125.  
  126.    public Component getComponentAfter(Container var1, Component var2) {
  127.       Component var3;
  128.       return var2 instanceof JComponent && (var3 = ((JComponent)var2).getNextFocusableComponent()) != null ? var3 : this.tabOrderNextComponent(var1, var2);
  129.    }
  130.  
  131.    public Component getComponentBefore(Container var1, Component var2) {
  132.       Component var3;
  133.       return (var3 = this.inverseGetNextFocusable(var1, var2)) != null ? var3 : this.tabOrderPreviousComponent(var1, var2);
  134.    }
  135.  
  136.    private Component getDeepestLastComponent(Component var1) {
  137.       return var1.isVisible() && (var1 instanceof JComponent && !((JComponent)var1).isManagingFocus() || !(var1 instanceof JComponent)) && var1 instanceof Container && ((Container)var1).getComponentCount() > 0 ? this.getDeepestLastComponent(this.getLastComponent((Container)var1)) : var1;
  138.    }
  139.  
  140.    public Component getFirstComponent(Container var1) {
  141.       Component[] var2 = this.childrenTabOrder(var1);
  142.       return var2.length > 0 ? var2[0] : null;
  143.    }
  144.  
  145.    Container getFocusRoot(Component var1) {
  146.       for(Container var2 = var1.getParent(); var2 != null; var2 = ((Component)var2).getParent()) {
  147.          if (var2 instanceof JComponent && ((JComponent)var2).isFocusCycleRoot() || var2 instanceof Window || var2 instanceof Dialog) {
  148.             return var2;
  149.          }
  150.       }
  151.  
  152.       return null;
  153.    }
  154.  
  155.    private Component getFocusableComponentAfter(Component var1, Container var2, boolean var3) {
  156.       Component var5 = var1;
  157.       Component var4 = var1;
  158.  
  159.       do {
  160.          if (var3) {
  161.             var4 = this.getNextComponent(var4, var2, true);
  162.          } else {
  163.             var4 = this.getPreviousComponent(var4, var2);
  164.          }
  165.       } while(var4 != null && var4 != var5 && (!var4.isVisible() || !var4.isFocusTraversable() || !var4.isEnabled()));
  166.  
  167.       return var4;
  168.    }
  169.  
  170.    public Component getLastComponent(Container var1) {
  171.       Component[] var2 = this.childrenTabOrder(var1);
  172.       return var2.length > 0 ? var2[var2.length - 1] : null;
  173.    }
  174.  
  175.    private Component getNextComponent(Component var1, Container var2, boolean var3) {
  176.       Object var4 = null;
  177.       if (var3 && var1.isVisible() && (!(var1 instanceof JComponent) || !((JComponent)var1).isManagingFocus()) && var1 instanceof Container && ((Container)var1).getComponentCount() > 0) {
  178.          return this.getFirstComponent((Container)var1);
  179.       } else {
  180.          Container var5 = var1.getParent();
  181.          Component var6 = this.getComponentAfter(var5, var1);
  182.          if (var6 != null) {
  183.             return var6;
  184.          } else {
  185.             return (Component)(var5 == var2 ? var2 : this.getNextComponent(var5, var2, false));
  186.          }
  187.       }
  188.    }
  189.  
  190.    private Component getPreviousComponent(Component var1, Container var2) {
  191.       Container var3 = var1.getParent();
  192.       if (var1 == var2) {
  193.          return this.getDeepestLastComponent(var2);
  194.       } else {
  195.          Component var4 = this.getComponentBefore(var3, var1);
  196.          return (Component)(var4 != null ? this.getDeepestLastComponent(var4) : var3);
  197.       }
  198.    }
  199.  
  200.    private Component inverseGetNextFocusable(Container var1, Component var2) {
  201.       Component[] var3 = var1.getComponents();
  202.       int var4 = 0;
  203.  
  204.       for(int var5 = var3.length; var4 < var5; ++var4) {
  205.          if (var3[var4] instanceof JComponent && ((JComponent)var3[var4]).getNextFocusableComponent() == var2) {
  206.             return var3[var4];
  207.          }
  208.       }
  209.  
  210.       return null;
  211.    }
  212.  
  213.    public void processKeyEvent(Component var1, KeyEvent var2) {
  214.       if (var2.getKeyCode() == 9 || var2.getKeyChar() == '\t') {
  215.          if (var1 instanceof JComponent) {
  216.             JComponent var3 = (JComponent)var1;
  217.             if (var3.isManagingFocus()) {
  218.                int var4 = ((InputEvent)var2).getModifiers() & 2;
  219.                if (var4 != 2 || var2.getKeyCode() == 73) {
  220.                   return;
  221.                }
  222.             }
  223.          }
  224.  
  225.          if (((AWTEvent)var2).getID() != 401) {
  226.             ((InputEvent)var2).consume();
  227.             return;
  228.          }
  229.  
  230.          if ((((InputEvent)var2).getModifiers() & 1) == 1) {
  231.             this.focusPreviousComponent(var1);
  232.          } else {
  233.             this.focusNextComponent(var1);
  234.          }
  235.  
  236.          ((InputEvent)var2).consume();
  237.       }
  238.  
  239.    }
  240.  
  241.    private Component tabOrderNextComponent(Container var1, Component var2) {
  242.       Component[] var3 = this.childrenTabOrder(var1);
  243.       int var5 = var3.length;
  244.       if (var5 == 1) {
  245.          return null;
  246.       } else {
  247.          for(int var4 = 0; var4 < var5 - 1; ++var4) {
  248.             if (var3[var4] == var2) {
  249.                return var3[var4 + 1];
  250.             }
  251.          }
  252.  
  253.          return null;
  254.       }
  255.    }
  256.  
  257.    private Component tabOrderPreviousComponent(Container var1, Component var2) {
  258.       Component[] var3 = this.childrenTabOrder(var1);
  259.       int var5 = var3.length;
  260.       if (var5 == 1) {
  261.          return null;
  262.       } else {
  263.          for(int var4 = 1; var4 < var5; ++var4) {
  264.             if (var3[var4] == var2) {
  265.                return var3[var4 - 1];
  266.             }
  267.          }
  268.  
  269.          return null;
  270.       }
  271.    }
  272. }
  273.